
package pratica05.model;

/**
 *
 * @author a100101
 */
public abstract class Decorator implements Component{

    private java.util.ArrayList<Observer> observadores = new java.util.ArrayList<Observer>();
    protected Component comp;

    public Decorator(Component c){
        this.comp = c;
    }

    @Override
    public boolean agregar(Observer ob) {
        return this.observadores.contains(ob)?false:this.observadores.add(ob);
    }

    @Override
    public boolean desagregar(Observer ob) {
        return this.observadores.contains(ob)?false:this.observadores.remove(ob);
    }

    @Override
    public void notifyTodos() {
        java.util.ArrayList<Observer> todos = new java.util.ArrayList<Observer>();
        todos.addAll(this.comp.todosObservadores());
        for (Observer o: observadores)
            if (! todos.contains(o))
                todos.add(o);
        for (Observer o: observadores)
            o.update(this);
    }

    @Override
    public java.util.ArrayList<Observer> todosObservadores(){
        java.util.ArrayList<Observer> todos = new java.util.ArrayList<Observer>();
        todos.addAll(this.comp.todosObservadores());
        for (Observer o: observadores)
            if (! todos.contains(o))
                todos.add(o);
        return todos;
    }

}
